package com.itheima.service.impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.dao.ProvinceDao;
import com.itheima.dao.impl.ProvinceDaoImpl;
import com.itheima.domain.Province;
import com.itheima.service.ProvinceService;
import com.itheima.utils.JDBCUtils;
import com.itheima.utils.JedisPoolUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.List;

public class ProvinceServiceImpl implements ProvinceService {
    ProvinceDao dao = new ProvinceDaoImpl() ;
    @Override
    public List<Province> findAll() {
        return dao.findAll();
    }


    //非关系型数据库我要在业务层把json返回,他是字符串形式
    @Override
    public String findRedis() {
        //要加入非关系数据库,这种复杂的操作在业务层完成
        // 首先要判断是否第一次连接
        Jedis jedis = JedisPoolUtils.getJedis( );
        //假设我连接对象jedis设置的键值为province
        String province = jedis.get("province");
        //如果它为null或者空字符串
        //说明是第一次连接,你的缓存数据库必须访问数据库保存数据
        if (province==null ||"".contains(province)){
            //访问数据库保存数据到缓存数据库
            List<Province> list = dao.findAll( );
            //序列化集合
            ObjectMapper mapper =new ObjectMapper();
            //这里你不能抛异常,因为你的接口没有处理异常的方法
            try {
                 province = mapper.writeValueAsString(list);
                jedis.set("province",province);
                System.out.println("是第一次访问,访问的是sql数据库" );
            } catch (JsonProcessingException e) {
                e.printStackTrace( );
            }
        }else {
            System.out.println("不是第一次访问,访问的是缓存数据" );
        }

        try {

        } catch (Exception e) {
            e.printStackTrace( );
        }finally {
            //返回连接资源
            System.out.println("我返回连接对象了" );
            jedis.close();
        }


        return province;
    }




}
